//
//  XMLParser.m
//  解析XML
//
//  Created by Hello Cai on 2021/2/21.
//

#import "XMLParser.h"

@interface XMLParser()<NSXMLParserDelegate>

@property(nonatomic, strong)NSXMLParser *parser;

@end

@implementation XMLParser

- (instancetype)initWithData:(NSData *)data
{
    self = [super init];
    if (self) {
        self.parser = [[NSXMLParser alloc] initWithData:data];
        self.parser.delegate = self;
    }
    return self;
}

- (void)startParser{
    [self.parser parse];
}


// 文档开始的时候触发
- (void)parserDidStartDocument:(NSXMLParser *)parser {
    NSLog(@"parserDidStartDocument");
}

// 文档出错的时候触发
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    
}

/*
 <?xml version="1.0" encoding="UTF-8" ?>
 <MESSAGE Version="1.0">
     <HEADER MsgType="MSG_UNLOCK_RSP" MsgSeq="0" />
     <RESULT Value="OK" ErrorCode="0"/>
     <INFO OperateId="2040f7cfcb1acecff62ef853147fadd5" />
 </MESSAGE>
 */
// 遇到一个开始标签的时候触发
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    /**
     2021-02-21 17:06:40.062620+0800 解析XML[5349:252585] ---didStartElement--elementName:HEADER, attributeDict:{
         MsgSeq = 0;
         MsgType = "MSG_UNLOCK_RSP";
     }
     也就是节点HEADER同级的属性名称和属性值作为key，value打包成一个字典
     */
    NSLog(@"---11 didStartElement--elementName:%@, attributeDict:%@", elementName, attributeDict);
}

// 遇到字符串时候触发，该方法是解析元素文本内容主要场所
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    NSLog(@"---22 foundCharacters--string:%@", string);
}

// 遇到结束标签时触发，在该方法中主要是清理刚刚解析完成的元素产生的影响，以便于不影响接下来的解析
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    NSLog(@"---33 didEndElement--elementName:%@", elementName);
}

// 遇到文档结束时触发
- (void)parserDidEndDocument:(NSXMLParser *)parser {
    NSLog(@"parserDidEndDocument");
}

@end
